home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 6 / QRZ Ham Radio Callsign Database - Volume 6.iso / mac / files / amiga / csrc720j.lzh / hser.c < prev    next >
C/C++ Source or Header  |  1993-02-16  |  4KB  |  211 lines

  1. /* User process for Kantronics Host Mode
  2.    Copyright Peter Hardie VE5VA 1990
  3. */
  4. #include <exec/types.h>
  5. #include <exec/exec.h>
  6. #include <ctype.h>
  7. #include <libraries/dos.h>
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <stdlib.h>
  11. #include "kiss.h"
  12. #include "port.h"
  13.  
  14.  
  15. extern long windbit,keybit;
  16. extern unsigned char ichar;
  17. extern struct IOStdReq *Con_Read;
  18. extern char *title;
  19. short debug;
  20. extern short interflag;
  21. extern char tmpstr[];
  22. ULONG class;
  23. USHORT code;
  24.  
  25. long getbits,portbit,sendbit;
  26. struct MsgPort *Ctl_Port;
  27. struct kiss_msg km;
  28. struct MsgPort *ctl_port,*my_port,*sendport;
  29.  
  30. unsigned char inbuf[100];
  31. short hostport,hoststream;
  32.  
  33. /* The window isn't open yet so have to printf in initser but
  34.    ttputs in anything else.
  35. */
  36. initser(port,stream)
  37. short port,stream;
  38. {
  39.    register short i;
  40.    register struct regd *rp;
  41.    if((port != 1) && (port != 2)) {
  42.       printf("Illegal port number\n");
  43.       return(1);
  44.    }
  45.    if((stream != -1) && ((stream < 1) || (stream > 26))) {
  46.       printf("Illegal stream number\n");
  47.       return(1);
  48.    }
  49.    km.rstream = stream;
  50.    km.rport = port;
  51.    /* Find the host process - don't wait long though */
  52.    for(i=0;i < 6; i++ ) {
  53.       if(ctl_port = FindPort(CTL_NAME))break;
  54.       Delay(250L);
  55.       if((i%6) == 0)
  56.          printf("port %d stream %d waiting for reader\n",port,stream);
  57.    }
  58.    if(ctl_port == 0) {
  59.       printf("Can't find control process\n");
  60.       return(1);
  61.    }
  62.    /* Register as a user on the specified port and stream */
  63.    km.channel = K_REGISTER;
  64.    my_port = km.cm.mn_ReplyPort = CreatePort(0L,0L);
  65.    if(my_port == 0L) {
  66.       printf("Can't create port\n");
  67.       return(2);
  68.    }
  69.    portbit = (1L << my_port->mp_SigBit);
  70.    km.cm.mn_Node.ln_Type = NT_MESSAGE;
  71.    PutMsg(ctl_port,&km);
  72.    Wait(portbit);
  73.  
  74.    /* Create new port in the message struct to send the message to */
  75.    if(km.channel == -1) {
  76.       printf("Error returned from control process\n");
  77.       DeletePort(my_port);
  78.       DeletePort(sendport);
  79.       return(3);
  80.    }
  81.    GetMsg(my_port);
  82.  
  83. /*
  84.    All drivers must return a port and stream in rport and rstream
  85.    when K_REGISTER is called. The program converts them to characters.
  86. */
  87.    hostport = km.rport +'0';
  88.    hoststream = km.rstream -1 + 'A';
  89.  
  90.    /* portbit will signal a received message from the TNC
  91.       sendbit will signal that the driver has ReplyMsg to a
  92.       message that we have sent to the driver.
  93.    */
  94.    sendport = km.cm.mn_ReplyPort = CreatePort(0L,0L);
  95.    sendbit = (1L << sendport->mp_SigBit);
  96.  
  97.    return(0);
  98. }
  99. char portname[10];
  100. struct MsgPort *our_port;
  101. makeport()
  102. {
  103.    sprintf(portname,"CBBS-%c%c",hostport,hoststream);
  104.    if(FindPort(portname))return(1);
  105.    if((our_port = CreatePort(portname,0L)) == 0)return(1);
  106.    return(0);
  107. }
  108. closeport()
  109. {
  110.    if(our_port)DeletePort(our_port);
  111. }
  112.  
  113. sendcommand(s)
  114. unsigned char *s;
  115. {
  116.    register unsigned char *cp;
  117.    register unsigned char *tp;
  118.    cp = s;
  119.  
  120.    km.channel = K_WRT_CMND;
  121.    tp = &km.msg[0];
  122.    while(*cp)*tp++ = *cp++;
  123.    /* Do not send a carriage return at the end of a command */
  124.    if((*(tp-1) == '\r') || (*(tp-1) == '\n'))tp--;
  125.    *tp = 0;
  126.    km.msgsize = tp - &km.msg[0];
  127.    PutMsg(ctl_port,&km);
  128.    Wait(sendbit);
  129.    GetMsg(sendport);
  130. }
  131. senddata(s)
  132. unsigned char *s;
  133. {
  134.    register unsigned char *cp;
  135.    register unsigned char *tp;
  136.    cp = s;
  137.  
  138.    km.channel = K_WRT_DATA;
  139.  
  140.    tp = &km.msg[0];
  141.    while(*cp)*tp++ = *cp++;
  142.    *tp = 0;
  143.    km.msgsize = tp - &km.msg[0];
  144.    PutMsg(ctl_port,&km);
  145.    Wait(sendbit);
  146.    GetMsg(sendport);
  147. }
  148. schar(c)
  149. unsigned char c;
  150. {
  151.  
  152.    km.channel = K_WRT_DATA;
  153.  
  154.    km.msg[0] = c;
  155.    km.msgsize = 1;
  156.    PutMsg(ctl_port,&km);
  157.    Wait(sendbit);
  158.    GetMsg(sendport);
  159. }
  160. cleanser()
  161. {
  162.    /* Send shutdown message to control process
  163.       (If it is still there)
  164.     */
  165.    if(FindPort(CTL_NAME)) {
  166.       km.cm.mn_ReplyPort = my_port;
  167.       km.channel = K_SHUTUP;
  168.       PutMsg(ctl_port,&km);
  169.       WaitPort(my_port);
  170.    }
  171.    DeletePort(my_port);
  172.    DeletePort(sendport);
  173. }
  174. beep()
  175. {
  176.    km.channel = K_BEEP;
  177.    km.msgsize = 0;
  178.    PutMsg(ctl_port,&km);
  179.    Wait(sendbit);
  180.    GetMsg(sendport);
  181. }
  182. getstat()
  183. {
  184.    km.channel = K_GET_STAT;
  185.    km.msgsize = 0;
  186.    PutMsg(ctl_port,&km);
  187.    Wait(sendbit);
  188.    GetMsg(sendport);
  189. }
  190.  
  191.  
  192.  
  193. /* Put all the stuff that's not used in here */
  194. char passchr,hfstream,vhfstream;
  195. /* Don't need the audio device */
  196. initbeep()
  197. {
  198. }
  199. donebeep()
  200. {
  201. }
  202. inittnc()
  203. {
  204. }
  205. breakport()
  206. {
  207. }
  208. force_modem()
  209. {
  210. }
  211.